package com.javasm.entity;

import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

/**
 * UserDetails 是spring security提供的一个接口，目的是封装登录的用户
 * 需要实现这个接口，复写其中的方法，框架会自动调用这些方法做一些处理
 */

public class LoginUser implements UserDetails {

    private User user;
    // 用户角色列表，一个用户可能有多个角色
    private List<String> roles=new ArrayList<>(1);

    public List<String> getRoles() {
        return roles;
    }

    public void setRoles(List<String> roles) {
        this.roles = roles;
    }

    /**
     * 返回用户的权限列表
     * @return
     */
    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        List<GrantedAuthority> authorities = new ArrayList<>(1);
      if(roles.size()>0){
          authorities = new ArrayList<>(roles.size());
          for (String role : roles) {
              // ROLE_ 这个前缀不可少
              authorities.add(new SimpleGrantedAuthority("ROLE_" + role));
          }
//          if(getUsername().equals("fengxiansheng")){
//              authorities.add(new SimpleGrantedAuthority("admin.hello"));
//          }
          return authorities;
      }
//        if(getUsername().equals("fengxiansheng")){
//            authorities.add(new SimpleGrantedAuthority("admin.hello"));
//        }
        return authorities;
    }

    /**
     * 返回用户密码
     * @return
     */
    @Override
    public String getPassword() {
        return user.getPassword();
    }

    /**
     * 返回用户名
     * @return
     */
    @Override
    public String getUsername() {
        return user.getUsername();
    }

    /**
     * 用户是否过期，可以根据用户的信息判断是否过期
     * @return
     *  false 表示用户过期，不可登陆
     *  true 可以登陆
     */
    @Override
    public boolean isAccountNonExpired() {
        return true;
    }


    /**
     * 用户是否锁定，可以根据用户的信息判断是否锁定
     * @return
     *  false 用户锁定，不可登陆
     *  true 没有锁定，可以登陆
     */
    @Override
    public boolean isAccountNonLocked() {
        return true;
    }

    /**
     * 用户密码是否过期
     * @return
     *  false 表示过期，不可登陆
     *  true 没有过期，可以登陆
     */
    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }

    /**
     * 用户是否禁用
     * @return
     *  false 用户禁用，不可登陆
     *  true 没有禁用，可以登陆
     */
    @Override
    public boolean isEnabled() {
        return true;
    }


    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
}
